//package com.macro.mall.portal.config;
//
//import com.macro.mall.portal.domain.QueueEnum;
//import org.springframework.amqp.core.*;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
///**
// * 消息队列相关配置
// * Created by macro on 2018/9/14.
// */
//@Configuration
//public class RabbitMqConfig {
//
//    /**
//     * 订单消息实际消费队列所绑定的交换机
//     */
//    @Bean
//    DirectExchange orderDirect() {
//        return ExchangeBuilder
//                .directExchange(QueueEnum.QUEUE_ORDER_CANCEL.getExchange())
//                .durable(true)
//                .build();
//    }
//
//    /**
//     * 订单延迟队列队列所绑定的交换机
//     */
//    @Bean
//    DirectExchange orderTtlDirect() {
//        return ExchangeBuilder
//                .directExchange(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getExchange())
//                .durable(true)
//                .build();
//    }
//
//    /**
//     * 订单实际消费队列
//     */
//    @Bean
//    public Queue orderQueue() {
//        return new Queue(QueueEnum.QUEUE_ORDER_CANCEL.getName());
//    }
//
//    /**
//     * 订单延迟队列（死信队列）
//     */
//    @Bean
//    public Queue orderTtlQueue() {
//        return QueueBuilder
//                .durable(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getName())
//                .withArgument("x-dead-letter-exchange", QueueEnum.QUEUE_ORDER_CANCEL.getExchange())//到期后转发的交换机
//                .withArgument("x-dead-letter-routing-key", QueueEnum.QUEUE_ORDER_CANCEL.getRouteKey())//到期后转发的路由键
//                .build();
//    }
//
//    /**
//     * 将订单队列绑定到交换机
//     */
//    @Bean
//    Binding orderBinding(DirectExchange orderDirect,Queue orderQueue){
//        return BindingBuilder
//                .bind(orderQueue)
//                .to(orderDirect)
//                .with(QueueEnum.QUEUE_ORDER_CANCEL.getRouteKey());
//    }
//
//    /**
//     * 将订单延迟队列绑定到交换机
//     */
//    @Bean
//    Binding orderTtlBinding(DirectExchange orderTtlDirect,Queue orderTtlQueue){
//        return BindingBuilder
//                .bind(orderTtlQueue)
//                .to(orderTtlDirect)
//                .with(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getRouteKey());
//    }
//
//}
